package Modelo;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 *
 * @author Usuario
 */
public class AccesoDatosEvaluaciones {

    Connection conexion;
    ResultSet consulta;
    Docente docente = new Docente();
    Evaluacion evaluacion=new Evaluacion();

    public AccesoDatosEvaluaciones() {
    }

    public void conectar() {
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/sistemaEvaluaciones", "postgres", "admin");
            System.out.println("Se conecto a la base de datos");
        } catch (Exception e) {
            System.out.println("No se pudo conectar a la base de datos " + e);
        }
    }

    public void desconectar() {
        try {
            consulta.close();
            conexion.close();
            System.out.println("Se desconecto correctamente de la base de datos");
        } catch (Exception e) {
            System.out.println("No se pudo desconectar de la base de datos " + e);
        }
    }

    public ArrayList<Evaluacion> consultarEvaluacion(int iddocente) {
        try {
            conectar();
            consulta = conexion.createStatement().executeQuery("select e.id, e.descripcion from tbl_evaluaciones e where e.id_docente='" + iddocente + "'");
            while (consulta.next()) {
                // cadena += consulta.getObject(consulta.getMetaData().getColumnLabel(1)).toString() + "," + consulta.getObject(consulta.getMetaData().getColumnLabel(2)).toString() + ",";
                evaluacion = new Evaluacion(consulta.getObject(consulta.getMetaData().getColumnLabel(1)).toString(), consulta.getObject(consulta.getMetaData().getColumnLabel(2)).toString());
                docente.getListaevaluacion().add(evaluacion);
            }
            desconectar();
        } catch (Exception e) {
            System.out.println("Error al intentar consultar preguntas para una evaluacion: " + e);
        }
        return docente.getListaevaluacion();
    }

    public ArrayList<Evaluacion> consultarEvaluacionConPreguntas(String idEvaluacion, int idDocente) {
        try {
            conectar();
            consulta = conexion.createStatement().executeQuery("select * from tbl_evaluaciones where id='" + idEvaluacion + "' and  id_docente='" +idDocente+ "'");
            while (consulta.next()) {
                evaluacion = new Evaluacion(consulta.getObject(consulta.getMetaData().getColumnLabel(1)).toString(), consulta.getObject(consulta.getMetaData().getColumnLabel(2)).toString(), consulta.getObject(consulta.getMetaData().getColumnLabel(4)).toString());
                docente.getListaevaluacion().add(evaluacion);
            }
            desconectar();
        } catch (Exception e) {
            System.out.println("Error al intentar consultar preguntas para una evaluacion: " + e);
        }
        return docente.getListaevaluacion();
    }

    public ArrayList<Curso> consultarCursosDeEva(String idevaluacion, int idDocente) {
        try {
            conectar();
            consulta = conexion.createStatement().executeQuery("select ce.cursos  from tbl_cursos_evaluaciones ce, tbl_evaluaciones e where e.id=ce.evaluaciones and ce.evaluaciones = '" + idevaluacion + "' and e.id_docente='"+ idDocente +"'");
            while (consulta.next()) {
                Curso curso=new Curso(consulta.getObject(consulta.getMetaData().getColumnLabel(1)).toString());
                evaluacion.getCursos().add(curso);
            }
            desconectar();
        } catch (Exception e) {
            System.out.println("Error al intentar consultar preguntas para una evaluacion: " + e);
        }
        return evaluacion.getCursos();
    }

    public ArrayList<Pregunta> consultarPreguntaDescrip(String descrip) {
        try {
            conectar();
            String sql = "select * from tbl_preguntas where lower(texto) like '%" + descrip + "%'";
            consulta = conexion.createStatement().executeQuery(sql);
            while (consulta.next()) {
                Pregunta pregunta = new Pregunta(consulta.getObject(consulta.getMetaData().getColumnLabel(1)).toString(), consulta.getObject(consulta.getMetaData().getColumnLabel(2)).toString(), consulta.getObject(consulta.getMetaData().getColumnLabel(3)).toString(), consulta.getObject(consulta.getMetaData().getColumnLabel(4)).toString());
                evaluacion.getPreguntas().add(pregunta);
            }
            desconectar();
        } catch (Exception e) {
            System.out.println("Error al intentar consultar un docente");
        }
        return evaluacion.getPreguntas();
    }
    
    public ArrayList<Curso> consultarCursosDocente(int idDocente) {
        try {
            conectar();
            String sql = "select distinct(cu.nombre) from tbl_cursos cu, tbl_cursos_docentes cudo where cudo.docente='" + idDocente + "'";
            consulta = conexion.createStatement().executeQuery(sql);
            while (consulta.next()) {
                Curso cursos = new Curso(consulta.getObject(consulta.getMetaData().getColumnLabel(1)).toString());
                docente.getListacursos().add(cursos);
            }
            desconectar();
        } catch (Exception e) {
            System.out.println("Error al intentar consultar un docente");
        }
        return docente.getListacursos();
    }

    public int insertarPreguntaEval(String idev, String idpr) {
        try {
            conectar();
            String sql = "insert into tbl_evaluaciones_preguntas values('" + idev + "','" + idpr + "')";
            int s = conexion.createStatement().executeUpdate(sql);
            desconectar();
            return 1;
        } catch (Exception e) {
            System.out.println("Error al intentar borrar una evaluacion");
        }
        return -1;
    }
    
    public int insertarcursoEvaluacion(String curso, String evaluacion) {
        try {
            conectar();
            String sql = "insert into tbl_cursos_evaluaciones values('" + curso + "','" + evaluacion + "')";
            int s = conexion.createStatement().executeUpdate(sql);
            desconectar();
            return 1;
        } catch (Exception e) {
            System.out.println("Error al intentar borrar una evaluacion");
        }
        return -1;
    }

    public int insertarEva(String id, String descripcion, int id_docente, String fecha) {
        try {
            conectar();
            String sql = "insert into tbl_evaluaciones values('" + id + "','" + descripcion + "','" + id_docente + "', '" + fecha + "')";
            int s = conexion.createStatement().executeUpdate(sql);
            desconectar();
            return 1;
        } catch (Exception e) {
            System.out.println("Error al intentar borrar una evaluacion");
        }
        return -1;
    }

    public ArrayList<Pregunta> consultarPregunta(String idevaluacion, int id_docente) {
        ResultSet consulta;
        try {
            conectar();
            String sql = "select p.* from tbl_preguntas p, tbl_evaluaciones_preguntas ev,  tbl_evaluaciones evaluaciones where p.id=ev.preguntas and ev.evaluaciones='" + idevaluacion + "' and evaluaciones.id_docente='"+ id_docente +"'";
            consulta = conexion.createStatement().executeQuery(sql);
            while (consulta.next()) {
                Pregunta pregunta = new Pregunta(consulta.getObject(consulta.getMetaData().getColumnLabel(1)).toString(), consulta.getObject(consulta.getMetaData().getColumnLabel(2)).toString(), consulta.getObject(consulta.getMetaData().getColumnLabel(3)).toString(), consulta.getObject(consulta.getMetaData().getColumnLabel(4)).toString());
                evaluacion.getPreguntas().add(pregunta);
            }
            desconectar();
        } catch (Exception e) {
            System.out.println("Error al intentar consultar un docente");
        }
        return evaluacion.getPreguntas();
    }

    public boolean consultarEvaluacion(String idevaluacion) {
        try {
            conectar();
            String sql = "select * from tbl_evaluaciones where id='" + idevaluacion + "'";
            consulta = conexion.createStatement().executeQuery(sql);
            if (consulta.next()) {
                return true;
            }
            desconectar();
        } catch (Exception e) {
            System.out.println("Error al intentar borrar una evaluacion");
        }
        return false;
    }

    public int EliminarEvaluacion(String idevaluacion) {
        try {
            conectar();
            if (consultarEvaluacion(idevaluacion) == true) {
                String sql = "delete from tbl_evaluaciones where id='" + idevaluacion + "'";
                int s = conexion.createStatement().executeUpdate(sql);
                desconectar();
                return 1;
            }
        } catch (Exception e) {
            System.out.println("Error al intentar borrar una evaluacion");
        }
        return -1;
    }
    
    public String obtenerFecha(){
        return evaluacion.getLaFecha();
    }

}
